/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BL;

import DA.DAPallet;
import DA.DAReportes;
import com.toedter.calendar.JDateChooser;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.JTable;

/**
 *
 * @author alejandro
 */
public class BLReportes {
    
    public void limpiaTabla (JTable tblReporteInventario)
    {
        BLModelo modelo = new BLModelo();
        tblReporteInventario.setModel(modelo);

        //modelo.addColumn("Código");
        //modelo.addColumn("Empresa");
        //modelo.addColumn("Tipo Contacto");
        //modelo.addColumn("Tipo Documento");
        //modelo.addColumn("Nro. Documento");
        //modelo.addColumn("Estado");
        //modelo.addColumn("Nombre");
        //modelo.addColumn("Apellido Paterno");
    }
    
    public JTable buscarPallets(int idTipoProd,String nombEstado,int idProveedor,Date fRegIni,Date fRegFin, Date fVencIni,Date fVencFin,JTable tblReporteInventario){
            DAReportes dAReportes = new DAReportes();
            ResultSet rs = null;
                      
        
            rs = dAReportes.buscarPallets(idTipoProd,nombEstado,idProveedor,fRegIni,fRegFin,fVencIni,fVencFin); 
            this.llenaTablaPallets(rs, tblReporteInventario);
            
            JTable objTablaDatosReporte = new JTable();
            BLModelo modelo = new BLModelo();
            rs = dAReportes.buscarPallets(idTipoProd,nombEstado,idProveedor,fRegIni,fRegFin,fVencIni,fVencFin); 
            objTablaDatosReporte=llenaTablaPalletsReporte(rs);
            return objTablaDatosReporte;    
    
    } 
    
    
    public void llenaTabla (ResultSet rs, JTable tblContacto)
    {
        //DAContacto daContacto = new DAContacto();

        BLModelo modelo = new BLModelo();
        tblContacto.setModel(modelo);

        modelo.addColumn("Código");
        modelo.addColumn("Empresa");
        modelo.addColumn("Tipo Contacto");
        modelo.addColumn("Tipo Documento");
        modelo.addColumn("Nro. Documento");
        modelo.addColumn("Estado");
        modelo.addColumn("Nombre");
        modelo.addColumn("Apellido Paterno");
     
        //Ocultar columna Código
        //tblContacto.getColumnModel().getColumn(0).setMaxWidth(0);
        //tblContacto.getColumnModel().getColumn(0).setMinWidth(0);
        //tblContacto.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0);
        //tblContacto.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0);

        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[8];
                fila[0] = rs.getObject("IDCONTACTO");
                fila[1] = rs.getObject("NOMBEMPRESA");
                fila[2] = rs.getObject("NOMBTIPOCONTACTO");
                fila[3] = rs.getObject("DESCRIPCION");
                fila[4] = rs.getObject("NROTIPODOCUMENTO");
                fila[5] = rs.getObject("ESTADO");
                fila[6] = rs.getObject("NOMBRE");
                fila[7] = rs.getObject("APEPATERNO");
               
                modelo.addRow(fila);
                
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
        }
    }

    private void llenaTablaPallets(ResultSet rs, JTable tblReporteInventario) {
        BLModelo modelo = new BLModelo();
        tblReporteInventario.setModel(modelo);

        modelo.addColumn("Código Pallet");
        modelo.addColumn("Tipo de Producto");
        modelo.addColumn("Producto");
        modelo.addColumn("Tipo Palleta");
        //modelo.addColumn("Código Rack");
        modelo.addColumn("Estado");
        
        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[6];
                fila[0] = rs.getObject("idpallet");
                fila[1] = rs.getObject("tipo");
                fila[2] = rs.getObject("nombreProd");
                fila[3] = rs.getObject("nombre");
                //fila[4] = rs.getObject("idrack");
                fila[4] = rs.getObject("estado");
                              
                modelo.addRow(fila);
                
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
        }
        
        
    }

    private JTable llenaTablaPalletsReporte(ResultSet rs) {
       
        JTable tablaDatosReporte= new JTable();
        BLModelo modelo = new BLModelo();
        tablaDatosReporte.setModel(modelo);
        
        modelo.addColumn("Cod. Pallet");
        modelo.addColumn("Producto");
        modelo.addColumn("Tipo producto");
        modelo.addColumn("Rack/Fil/Col");
        modelo.addColumn("Estado"); //estado del palet
        modelo.addColumn("Fecha vencimiento");
        modelo.addColumn("Fecha registro");// tipo proveedor
        modelo.addColumn("nombempresa");//proveedor
        modelo.addColumn("Tipo Paleta");//tipo paleta
 
        
        
        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[9];
                Object ubicacion = new Object();
                
                fila[0] = rs.getObject("idpallet");
                fila[1] = rs.getObject("nombreProd");
                fila[2] = rs.getObject("tipo");
                ubicacion = rs.getObject("idposicionxrack");
                fila[3] = generarUbicacion(ubicacion);
                
                fila[4] = rs.getObject("estado");
                fila[5] = rs.getObject("fechavencimiento");
                fila[6] = rs.getObject("fecharegistro");
                fila[7] = rs.getObject("nombempresa");
                fila[8] = rs.getObject("nombre");
            
                
                              
                modelo.addRow(fila);
                
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
            return null;
        }
        return tablaDatosReporte;
    }
    
    
    //REPORTES TRAZABILIDAD DE PALLET
    public JTable buscarTrazabilidadPallet(int codigo,int codigo2,Date FecDe,Date FecHasta, JTable tblReporteTrazabilidad) throws SQLException{
            DAReportes dAReportes = new DAReportes();
            ResultSet rs = null;
           
            
            rs = dAReportes.buscarTrazabilidadPallet(codigo,codigo2,FecDe, FecHasta); 
            
            
            this.llenaTablaTrazabilidadPallet(rs, tblReporteTrazabilidad);
            //rs.beforeFirst();
                        
            JTable objTablaDatosReporte = new JTable();
            BLModelo modelo = new BLModelo();
            rs = dAReportes.buscarTrazabilidadPallet(codigo,codigo2,FecDe, FecHasta); 
            objTablaDatosReporte= llenaTablaTrazabilidadReporte(rs);
            return objTablaDatosReporte;    
              
           
        }
    
    
    
    
   
    
    private void llenaTablaTrazabilidadPallet(ResultSet rs, JTable tblReporteTrazabilidad) {
        BLModelo modelo = new BLModelo();
        tblReporteTrazabilidad.setModel(modelo);

        modelo.addColumn("Código Pallet");
        modelo.addColumn("Código Movimiento");
        modelo.addColumn("Fecha");
        modelo.addColumn("Nombre");
        modelo.addColumn("Descripción");
        //modelo.addColumn("Código Producto");
        
        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[5];
                fila[0] = rs.getObject("idpallet");
                fila[1] = rs.getObject("idmovimiento");
                fila[2] = rs.getObject("fecha");
                fila[3] = rs.getObject("nombre");
                               
                fila[4] = rs.getObject("descripcion");
                
                              
                modelo.addRow(fila);
                
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
        }
        
        
    }
    
    
    private JTable llenaTablaTrazabilidadReporte(ResultSet rs) {
       
        JTable tablaDatosReporte= new JTable();
        BLModelo modelo = new BLModelo();
        tablaDatosReporte.setModel(modelo);
        
        modelo.addColumn("Código Pallet");
        modelo.addColumn("Código Movimiento");
        modelo.addColumn("Fecha");
        modelo.addColumn("Hora");
        modelo.addColumn("Nombre");
        modelo.addColumn("Detalle");
        modelo.addColumn("Producto");
        modelo.addColumn("Origen (R/F/C)");
        modelo.addColumn("Destino(R/F/C)");
        
        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[9];
                Object origen = new Object();
                Object destino = new Object();
                Object descripcion = new Object();
                //String origen,destino;
                 
                
                fila[0] = rs.getInt("idpallet");
                fila[1] = rs.getObject("idmovimiento");
                fila[2] = rs.getObject("fecha");
                fila[3] = rs.getObject("hora");
                fila[4] = rs.getObject("nombre");
                
                descripcion = rs.getObject("descripcion");
                if (descripcion == null){
                    fila[5] = "";
                }else{
                    fila[5] = descripcion;
                }
                                
                fila[6] = rs.getObject("nombProd");
                origen = rs.getObject("origen");
                fila[7] = generarUbicacion(origen); 
                
                destino = rs.getObject("destino");
                fila[8] = generarUbicacion(destino);
                
                modelo.addRow(fila);
                
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
            return null;
        }
        return tablaDatosReporte;
    }
    
    
    
    public Object generarUbicacion(Object posicion){
        int codigoPosicion;
        ResultSet rs;
        String idPosicion = posicion +"";
        
        String cadena = "";
        
               
        if (!"".equals(posicion) && (posicion!=null)) {
            codigoPosicion = Integer.parseInt(idPosicion);
            DAPallet daPallet = new DAPallet();
            rs = daPallet.generarFila(codigoPosicion);
              try
                {
                    while (rs.next())
                    {
                        
                        
                        cadena += rs.getObject("idrack");
                        cadena += "/"+ rs.getObject("fila");
                        cadena += "/"+ rs.getObject("columna");
                  
                        

                    }
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
                    return null;
                }
            
            
            return cadena;
        }
        else
            return "";
    
    
    
    
    
    
    }
 
    
    //REPORTE MERMAS Y PERDIDAS
    public JTable buscarMermas(int codigo,int idTipoProd,JDateChooser jdcFecIni,JDateChooser jdcFecFin,JTable tblMermasYPerdidas){
            DAReportes dAReportes = new DAReportes();
            ResultSet rs = null;
            
                   
            rs = dAReportes.buscarMermas(codigo,idTipoProd,jdcFecIni,jdcFecFin); 
            
            
            this.llenaTablaMermas(rs, tblMermasYPerdidas);
            
            JTable objTablaDatosReporte = new JTable();
            BLModelo modelo = new BLModelo();
            rs = dAReportes.buscarMermas(codigo,idTipoProd,jdcFecIni,jdcFecFin); 
            objTablaDatosReporte= llenaTablaMermasReporte(rs);
            return objTablaDatosReporte;  
    
    
    
    }
    
    
    private void llenaTablaMermas(ResultSet rs, JTable tblReporteMermas) {
        BLModelo modelo = new BLModelo();
        tblReporteMermas.setModel(modelo);
                
        modelo.addColumn("Cód. Movimiento");
        modelo.addColumn("Fecha");
        modelo.addColumn("Hora");
        modelo.addColumn("Origen (R/F/C)");
        modelo.addColumn("Cód. Producto");
        modelo.addColumn("Cantidad");
        
        
        
        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[6];
                Object origen = new Object();
                
                fila[0] = rs.getObject("idmovimiento");
                fila[1] = rs.getObject("fecha");
                fila[2] = rs.getObject("hora");
                origen = rs.getObject("origen");
                fila[3] = generarUbicacion(origen);
                fila[4] = rs.getObject("idproducto");
                fila[5] = rs.getObject("cantidad");
                              
                modelo.addRow(fila);
                
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
        }
        
        
    }
    
    private JTable llenaTablaMermasReporte(ResultSet rs) {
        BLModelo modelo = new BLModelo();
        JTable tablaDatosReporte= new JTable();
        tablaDatosReporte.setModel(modelo);
        
        modelo.addColumn("Cód. Movimiento");
        modelo.addColumn("Fecha");
        modelo.addColumn("Hora");
        modelo.addColumn("Origen (R/F/C)");
        modelo.addColumn("Descripción");
        
        modelo.addColumn("Fecha Venc.");
        modelo.addColumn("Cantidad");
        modelo.addColumn("Producto");
        
        
        
        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[8];
                Object origen = new Object();
                //String origen,destino;
                 
                
                fila[0] = rs.getObject("idmovimiento");
                fila[1] = rs.getObject("fecha");
                fila[2] = rs.getObject("hora");
                origen = rs.getObject("origen");
                fila[3] = generarUbicacion(origen);
                 fila[4] = rs.getObject("descripcion");
                fila[5] = rs.getObject("fechavencimiento"); 
                fila[6] = rs.getObject("cantidad");
                 fila[7] = rs.getObject("nombreProd");
                 
                
                                      
                
                
                modelo.addRow(fila);
                
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
            return null;
        }
        return tablaDatosReporte;
        
    }

    public void buscarLogs(String validarSqlInjection, JDateChooser jdcFecDe, JDateChooser jdcFecHasta, JTable tblReporteLogs) {
            DAReportes dAReportes = new DAReportes();
            ResultSet rs = null;
                   
            rs = dAReportes.buscarLogs(validarSqlInjection,jdcFecDe,jdcFecHasta); 
            this.llenaTablaLogs(rs, tblReporteLogs);
            
            //JTable objTablaDatosReporte = new JTable();
            //BLModelo modelo = new BLModelo();
            //rs = dAReportes.buscarMermas(codigo,idTipoProd,jdcFecIni,jdcFecFin); 
            //objTablaDatosReporte= llenaTablaMermasReporte(rs);
            //return objTablaDatosReporte;  
        
        
        
    }

    private void llenaTablaLogs(ResultSet rs, JTable tblReporteLogs) {
        
        BLModelo modelo = new BLModelo();
        tblReporteLogs.setModel(modelo);

        modelo.addColumn("Cod. Acción");
        modelo.addColumn("Acción");
        modelo.addColumn("Fecha");
       
        modelo.addColumn("Cod. Usuario");
        modelo.addColumn("Usuario");
        modelo.addColumn("Estado");
        
        //Ocultar columna ID
        tblReporteLogs.getColumnModel().getColumn(1).setMaxWidth(0);
        tblReporteLogs.getColumnModel().getColumn(1).setMinWidth(0);
        tblReporteLogs.getTableHeader().getColumnModel().getColumn(1).setMaxWidth(0);
        tblReporteLogs.getTableHeader().getColumnModel().getColumn(1).setMinWidth(0);
        try
        {
            while (rs.next())
            {
                Object [] fila = new Object[6];
                fila[0] = rs.getObject("idlogbd");
                fila[1] = rs.getObject("accion");
                fila[2] = rs.getObject("fecha");
                fila[3] = rs.getObject("idusuario");
                               
                fila[4] = rs.getObject("usuario");
                fila[5] = rs.getObject("estado");
                              
                modelo.addRow(fila);
                
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error al llenar la tabla","Error",JOptionPane.ERROR_MESSAGE);
        }
        
        
        
    }
}

